#include <stdio.h>
#include <stdlib.h>

// 合并两个有序数组
void mergeSortedArrays(int* A, int m, int* B, int n, int* C) {
    int i = 0, j = 0, k = 0;

    // 合并两个数组
    while (i < m && j < n) {
        if (A[i] <= B[j]) {
            C[k++] = A[i++];
        } else {
            C[k++] = B[j++];
        }
    }

    // 如果 A 数组还有剩余元素，加入 C 中
    while (i < m) {
        C[k++] = A[i++];
    }

    // 如果 B 数组还有剩余元素，加入 C 中
    while (j < n) {
        C[k++] = B[j++];
    }
}

// 打印数组
void printArray(int* arr, int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int A[] = {1, 3, 5, 7};
    int B[] = {2, 4, 6, 8};
    int m = sizeof(A) / sizeof(A[0]);
    int n = sizeof(B) / sizeof(B[0]);

    // 合并后的数组大小为 m + n
    int* C = (int*)malloc((m + n) * sizeof(int));

    // 合并有序数组
    mergeSortedArrays(A, m, B, n, C);

    // 输出合并后的数组
    printf("Merged array: ");
    printArray(C, m + n);

    // 释放内存
    free(C);

    return 0;
}
